// 合并区间

package Leetcode;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

class solution_056 {
    public int[][] merge(int[][] intervals) {
        // 重写compare方法
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] o1, int[] o2) {
                if (o1[0] == o2[0]) // 如果第一列相等
                    return o1[1] - o2[1]; // 就按第二列升序排序
                return o1[0] - o2[0]; // 按第一列升序排序
            }
        });

        List<int[]> result = new ArrayList<>();
        result.add(0, new int[] { intervals[0][0], intervals[0][1] });
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] <= result.get(result.size() - 1)[1]) {
                if (intervals[i][1] > result.get(result.size() - 1)[1])
                    result.get(result.size() - 1)[1] = intervals[i][1];
            } else
                result.add(result.size(), new int[] { intervals[i][0], intervals[i][1] });
        }
        // toArray参数类型是List泛型的数组
        return result.toArray(new int[result.size()][]);
    }
}

public class Solution056 {
    public static void main(String[] args) {
        int[][] intervals = new int[][] { { 2, 6 }, { 1, 3 }, { 15, 18 }, { 8, 10 } };
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] o1, int[] o2) {
                if (o1[0] == o2[0]) // 如果第一列相等
                    return o1[1] - o2[1]; // 就按第二列升序排序
                return o1[0] - o2[0]; // 按第一列升序排序
            }
        });
        for (int i = 0; i < intervals.length; i++)
            System.out.println(intervals[i][0] + "@" + intervals[i][1]);
    }
}
